import axios from "axios";
//加解密
import { encryptCBC, decryptCBC } from "../crypt/index"
//持久化
import { session_cache_key, token_cache_key } from '../cache/cacheKey'
import { getCache, hasCache } from '../cache'

//私钥
const secretKey = 'kokL8G4RmNfV69cdcJ9dfnrlFGsLy6mH';

//baseURL
// const development = 'http://10.0.0.15:8081';
export const development = 'http://172.26.2.97:8081';

//axios
export const networkRequest = axios;

//session配置
export const sessionConfig = {
    baseURL: development,
    url: '***',
    data: '***',
    method: 'post',
    timeout: 1000 * 30,
    headers: {
        'Content-Type': 'text/plain;charset=UTF-8',
    },
    transformRequest: [function (data, headers) {
        // 对发送的 data 进行任意转换处理
        //1、map转对象
        const str = Object.fromEntries(data);
        //2、对象转字符串
        const str1 = JSON.stringify(str);
        return str1;
    }],
    transformResponse: [function (data) {
        // 对接收的 data 进行任意转换处理
        if (isJSON(data)) {
            //错误处理:非密文->转json对象
            const newData = JSON.parse(data);
            return newData;
        } else {
            //密文
            //1、私钥解密
            const str = decryptCBC(data, secretKey);
            //2、字符串转对象
            const newData = JSON.parse(str);
            return newData;
        }
    }],
}

//基础配置
export const baseRequestConfig = {
    baseURL: development,
    url: '***',
    data: '***',
    method: 'post',
    timeout: 1000 * 30,
    headers: {
        'Content-Type': 'text/plain;charset=UTF-8',
    },
    transformRequest: [function (data, headers) {
        // 对发送的 data 进行任意转换处理
        //请求头增加session
        if (hasCache(session_cache_key)) {
            headers.sessionId = getCache(session_cache_key);
        } else {
            headers.sessionId = "";
        }
        //请求体增加token
        if (hasCache(token_cache_key)) {
            data.set('token', getCache(token_cache_key))
        } else {
            data.set('token', "")
        }
        //每个请求增加时间戳
        data.set('timestamp', Date.now())
        //1、map转对象
        const str = Object.fromEntries(data);
        //2、对象转字符串
        const str1 = JSON.stringify(str);
        //3、用真实密钥加密
        const newData = encryptCBC(str1, secretKey);
        return newData;
    }],
    transformResponse: [function (data) {
        // 对接收的 data 进行任意转换处理
        if (isJSON(data)) {
            //错误处理:非密文->转json对象
            const newData = JSON.parse(data);
            return newData;
        } else {
            //密文
            //3、用真实密钥加密
            const str = decryptCBC(data, secretKey);
            //2、字符串转对象
            const newData = JSON.parse(str);
            return newData;
        }
    }],
}

//文件上传配置配置
export const uploadFileConfig = {
    baseURL: development,
    url: '***',
    data: '***',
    method: 'post',
    timeout: 1000 * 60,
    authCode: "***",//自定义参数
    headers: {
        'Content-Type': 'multipart/form-data',
    },
    transformRequest: [function (data, headers) {
        // 对发送的 data 进行任意转换处理
        headers.authCode = uploadFileConfig.authCode
        return data;
    }],
    transformResponse: [function (data) {
        // 对接收的 data 进行任意转换处理
        if (isJSON(data)) {
            //错误处理:非密文->转json对象
            const newData = JSON.parse(data);
            return newData;
        } else {
            //密文
            //3、用真实密钥加密
            const str = decryptCBC(data, secretKey);
            //2、字符串转对象
            const newData = JSON.parse(str);
            return newData;
        }
    }],
}

function isJSON(str) {
    try {
        JSON.parse(str);
        return true;
    } catch (e) {
        return false;
    }
}
